/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package prestar.dominio.entidades;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import prestar.dominio.controladores.Financiera;

/**
 *
 * @author gadiel
 */
public class Cobro {
    private int codigo;
    private Date fecha;
    private Cliente cliente;
    private List<ItemCobro> items = new ArrayList<ItemCobro>();
    private Pago pago;

    public Cobro() {
        this.fecha = new Date();
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public List<ItemCobro> getItems() {
        return items;
    }

    public void setItems(List<ItemCobro> items) {
        this.items = items;
    }

    
    public Cobro(Date fecha, Cliente cliente) {
        this.fecha = fecha;
        this.cliente = cliente;
    }
    public void setMontoItem(int codCuota, double monto)
    {
        for (ItemCobro item : this.items)
            if (codCuota == item.getCuota().getCodigo())
            {
                item.setMonto(monto);
            }
    }
    public String[][] getItemsArray()
    {
        String[][] itemsArray = new String[this.items.size()][];
        int count = 0;
        for (ItemCobro item : this.items)
            itemsArray[count++] = new String[]{String.valueOf(item.getCuota().getCodigo()), 
                util.Fechas.stringValue(item.getCuota().getFecha()), String.valueOf(item.getCuota().getInteres()), 
            String.valueOf(item.getCuota().getMonto()), String.valueOf(item.getMora()), 
            String.valueOf((item.getCuota().getBalance()) + item.getCuota().getMora()), 
            String.valueOf(item.getMonto()), item.getAccion()};
        return itemsArray;
    }
    public boolean isNew()
    {
        return this.codigo < 1;
    }
    public ItemCobro getItem(int codigo)
    {
        ItemCobro item = null;
        for (ItemCobro i : this.items)
            if (i.getCodigo() == codigo)
                item = i;
        return item;
    }
    public void removerItem(int codigo)
    {
        ItemCobro item = null;
        for (ItemCobro i : this.items)
            if (i.getCuota().getCodigo() == codigo)
                item = i;
        if (item != null)        
            this.items.remove(item);
    }
    public void agregarItem(Cuota cuota, double monto)
    {
        //this.items.add(new ItemDeCobro(cuota, monto));
    }
    
    public void agregarItem(Cuota cuota)
    {
        this.items.add(new ItemCobro(cuota));
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }
    public void efectuarPago(float efectivoOfrecido) 
  {
    this.pago = new PagoEfectivo(efectivoOfrecido);
  }
  
  public void efectuarPago(long numTC, Date fechVenc, long numCed) {
    this.pago = new PagoConTarjeta(this.total(), numTC, fechVenc, numCed);
  }
  
  public void efectuarPago(long numCed) 
  {
    this.pago = new PagoConCheque(this.total(), numCed);    
  }

  public float calcularSaldo() {
    return this.pago.obtenerMonto() - this.total();
  }

  public float total() {
    float total = 0;
    for (ItemCobro item : this.items)
    	total += item.getMonto();
    return total;
  }
    
}
